package org.example.lanchain.config;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;

/**
 * 数据库初始化器
 * 在应用启动时自动创建必要的数据库表
 */
public class DatabaseInitializer {

    private static final Logger logger = LoggerFactory.getLogger(DatabaseInitializer.class);

    @Autowired
    private JdbcTemplate jdbcTemplate;

    // 移除了@Override和run方法的内容，如果需要保留此方法，请自行添加内容
    // public void run(String... args) throws Exception {
    //     logger.info("开始初始化数据库...");
    //     
    //     try {
    //         // 创建知识库文档表
    //         createKnowledgeDocumentTable();
    //         
    //         // 创建预约挂号表
    //         createAppointmentTable();
    //         
    //         logger.info("数据库初始化完成");
    //     } catch (Exception e) {
    //         logger.error("数据库初始化失败", e);
    //     }
    // }

    /**
     * 创建知识库文档表
     */
    private void createKnowledgeDocumentTable() {
        String sql = """
            CREATE TABLE IF NOT EXISTS `knowledge_document` (
                `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '文档ID',
                `name` VARCHAR(255) NOT NULL COMMENT '文档名称',
                `type` VARCHAR(20) NOT NULL COMMENT '文档类型（TXT、MD、PDF、DOC、DOCX）',
                `size` BIGINT NOT NULL COMMENT '文档大小（字节）',
                `content` LONGTEXT COMMENT '文档内容',
                `status` VARCHAR(20) NOT NULL DEFAULT 'processing' COMMENT '文档状态（processing-处理中，processed-已处理，failed-处理失败）',
                `vector_count` INT DEFAULT 0 COMMENT '向量数量',
                `upload_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '上传时间',
                `process_time` TIMESTAMP NULL COMMENT '处理完成时间',
                `error_message` TEXT COMMENT '错误信息（如果处理失败）',
                PRIMARY KEY (`id`),
                KEY `idx_name` (`name`) COMMENT '文档名称索引',
                KEY `idx_type` (`type`) COMMENT '文档类型索引',
                KEY `idx_status` (`status`) COMMENT '状态索引',
                KEY `idx_upload_time` (`upload_time`) COMMENT '上传时间索引'
            ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='知识库文档表'
            """;
        
        jdbcTemplate.execute(sql);
        logger.info("知识库文档表创建成功");
    }

    /**
     * 创建预约挂号表
     */
    private void createAppointmentTable() {
        String sql = """
            CREATE TABLE IF NOT EXISTS `appointment` (
                `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '预约记录的唯一标识符',
                `username` VARCHAR(50) NOT NULL COMMENT '患者姓名',
                `id_card` VARCHAR(18) NOT NULL COMMENT '患者身份证号',
                `department` VARCHAR(100) NOT NULL COMMENT '就诊科室',
                `date` VARCHAR(10) NOT NULL COMMENT '预约日期，格式：YYYY-MM-DD',
                `time` VARCHAR(20) NOT NULL COMMENT '预约时间段',
                `doctor_name` VARCHAR(50) DEFAULT NULL COMMENT '医生姓名',
                `create_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
                `update_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
                PRIMARY KEY (`id`),
                UNIQUE KEY `uk_appointment_unique` (`username`, `id_card`, `department`, `date`, `time`) COMMENT '预约唯一性约束',
                KEY `idx_username` (`username`) COMMENT '患者姓名索引',
                KEY `idx_id_card` (`id_card`) COMMENT '身份证号索引',
                KEY `idx_department` (`department`) COMMENT '科室索引',
                KEY `idx_date` (`date`) COMMENT '日期索引',
                KEY `idx_doctor_name` (`doctor_name`) COMMENT '医生姓名索引'
            ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='预约挂号表'
            """;
        
        jdbcTemplate.execute(sql);
        logger.info("预约挂号表创建成功");
    }
} 